Fixed negative allocations from gtk_box_size_allocate()
authorTristan Van Berkom <tristan.van.berkom@gmail.com>
Tue, 15 Jun 2010 18:27:12 +0000 (14:27 -0400)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Tue, 15 Jun 2010 18:27:12 +0000 (14:27 -0400)
Fixed the allocation loop to check if it was allocated at least
enough space to hold its visible children before going and distributing
extra space among children. Fixes bgo #617444.

gtk/gtkbox.c

index f16b7c4344df383ab85bbc5f2964ea4b61bb1939..c506fedf89ca8759329d6d0f56f41da2f5370266 100644 (file)
@@ -517,7 +517,6 @@ gtk_box_size_allocate (GtkWidget     *widget,
            */
 
           /* Sort descending by gap and position. */
-
           g_qsort_with_data (spreading,
                              nvis_children, sizeof (GtkBoxSpreading),
                              gtk_box_compare_gap, sizes);
@@ -525,7 +524,7 @@ gtk_box_size_allocate (GtkWidget     *widget,
           /* Distribute available space.
            * This master piece of a loop was conceived by Behdad Esfahbod.
            */
-          for (i = nvis_children - 1; i >= 0; --i)
+          for (i = nvis_children - 1; size > 0 && i >= 0; --i)
             {
               /* Divide remaining space by number of remaining children.
                * Sort order and reducing remaining space by assigned space
@@ -1061,7 +1060,7 @@ gtk_box_compute_size_for_opposing_orientation (GtkBox *box,
           /* Distribute available space.
            * This master piece of a loop was conceived by Behdad Esfahbod.
            */
-          for (i = nvis_children - 1; i >= 0; --i)
+          for (i = nvis_children - 1; size > 0 && i >= 0; --i)
             {
               /* Divide remaining space by number of remaining children.
                * Sort order and reducing remaining space by assigned space